/**
* Copyright (C) 2011-2012 trivago GmbH <mario.mueller@trivago.com>, <christian.krause@trivago.com>
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.trivago.mail.pigeon.web.components.recipients;
import com.vaadin.terminal.UserError;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Label;
import com.vaadin.ui.Panel;
import com.vaadin.ui.Upload;
import org.apache.log4j.Logger;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class UploadCsvFileComponent extends CustomComponent
implements Upload.SucceededListener,
Upload.FailedListener,
Upload.Receiver
{
private Panel root;
private boolean uploadFinished = false;
private Label label;
private Upload upload;
private File csvFile;
private static final Logger log = Logger.getLogger(UploadCsvFileComponent.class);
public UploadCsvFileComponent()
{
root = new Panel("Upload Text Version");
setCompositionRoot(root);
// Create the Upload component.
upload = new Upload("CSV-File", this);
// Use a custom button caption instead of plain "Upload".
upload.setButtonCaption("Upload Now");
// Listen for events regarding the success of upload.
upload.addListener((Upload.SucceededListener) this);
upload.addListener((Upload.FailedListener) this);
root.addComponent(upload);
root.addComponent(new Label("Click 'Browse' to " +
"select a file and then click 'Upload'."));
}
@Override
public void uploadFailed(Upload.FailedEvent event)
{
label = new Label("Uploading "
+ event.getFilename() + " of type '"
+ event.getMIMEType() + "' failed.");
root.addComponent(label);
upload.setComponentError(new UserError("Upload failed!"));
}
@Override
public OutputStream receiveUpload(String filename, String mimeType)
{
label = new Label();
try
{
csvFile = File.createTempFile("csv", "csv");
}
catch (IOException e)
{
log.error("Could not upload file", e);
}
FileOutputStream fos;
try
{
// Open the file for writing.
fos = new FileOutputStream(csvFile);
}
catch (final Exception e)
{
// Error while opening the file. Not reported here.
e.printStackTrace();
return null;
}
return fos; // Return the output stream to write to
}
@Override
public void uploadSucceeded(Upload.SucceededEvent event)
{
// Log the upload on screen.
label = new Label("File " + event.getFilename()
+ " of type '" + event.getMIMEType()
+ "' uploaded.");
root.addComponent(label);
uploadFinished = true;
}
public File getCsvFile()
{
return csvFile;
}
public boolean isUploadFinished()
{
return uploadFinished;
}
}